# coding=utf-8
import urllib.parse
import urllib.request
import requests
from apig_sdk import signer

def sendCode(phone,code):
    # 必填,请参考"开发准备"获取如下数据,替换为实际值
    # 认证用的appKey和appSecret硬编码到代码中或者明文存储都有很大的安全风险，建议在配置文件或者环境变量中密文存放，使用时解密，确保安全；
    url = 'https://smsapi.cn-north-4.myhuaweicloud.com:443/sms/batchSendSms/v1'  # APP接入地址(在控制台"应用管理"页面获取)+接口访问URI
    APP_KEY = "ea5m52n14aOYf2rpki16Ay8oawv7"  # APP_Key
    APP_SECRET = "K9pLZ8PijjBlCmToTAlJhnxOYOJ7"  # APP_Secret
    sender = "8824040205912"  # 国内短信签名通道号
    TEMPLATE_ID = "ac5e8161d21f48dc8717382d77bec900"  # 模板ID
    signature = "联谊"  # 签名名称
    receiver = f"86{phone}"  # 短信接收人号码
    TEMPLATE_PARAM = f'["{code}"]'  # 模板变量
    # 条件必填,国内短信关注,当templateId指定的模板类型为通用模板时生效且必填,必须是已审核通过的,与模板类型一致的签名名称


    # 必填,全局号码格式(包含国家码),示例:+86151****6789,多个号码之间用英文逗号分隔

    # 选填,短信状态报告接收地址,推荐使用域名,为空或者不填表示不接收状态报告
    # statusCallBack = ""

    '''
    选填,使用无变量模板时请赋空值 TEMPLATE_PARAM = '';
    单变量模板示例:模板内容为"您的验证码是${1}"时,TEMPLATE_PARAM可填写为'["369751"]'
    双变量模板示例:模板内容为"您有${1}件快递请到${2}领取"时,TEMPLATE_PARAM可填写为'["3","人民公园正门"]'
    模板中的每个变量都必须赋值，且取值不能为空
    查看更多模板规范和变量规范:产品介绍>短信模板须知和短信变量须知
    '''

    formData = urllib.parse.urlencode({
        'from': sender,
        'to': receiver,
        'templateId': TEMPLATE_ID,
        'templateParas': TEMPLATE_PARAM,
        'signature': signature #使用中国大陆短信通用模板时,必须填写签名名称
        # 'statusCallback': statusCallBack,
    }).encode('ascii')

    sig = signer.Signer()
    sig.Key = APP_KEY
    sig.Secret = APP_SECRET

    r = signer.HttpRequest("POST", url)
    r.headers = {"content-type": "application/x-www-form-urlencoded"}
    r.body = formData

    sig.Sign(r)
    resp = requests.request(r.method, r.scheme + "://" + r.host + r.uri, headers=r.headers, data=r.body, verify=False)
